// 发布订阅模式

function Panda() {
    // 在构造函数内部通过 this 绑定一个数组
    this.operators = [];
}

// 使用 on 函数 实现 订阅操作
Panda.prototype.on = function(fn) {
    // 使用当前实例的 operators 数组 保存参数传入的函数
    this.operators.push(fn);
}

// 使用 emit 函数 实现 发布
Panda.prototype.emit = function() {
    this.operators.forEach(fn => {
        fn();
    });
}

let p = new Panda();

// 第一次订阅
p.on(function() {
    console.log('first', Date.now());
});

// 第二次订阅
p.on(function() {
    console.log('second', Date.now());
});

// 第三次订阅
p.on(function() {
    console.log('third', Date.now());
});

// 发布
p.emit();